Ex05 - Filtros de aguçamento

1. Unsharp mask

Um filtro bastante utilizado para aguçar a imagem é denominado unsharp mask. Ele é capaz de realçar bordas calculando a diferença entre a imagem original e uma versão suavizada da imagem filtrada pela gaussiana. Para conseguir o realce de bordas, faça:

  • Calcule primeiro a unsharp mask ($df$)
  • Faça uma ponderação entre a imagem original e a imagem diferença: $$((1-k)*f + k*df)$$ onde $f$ é a imagem, $df$ é a unsharp mask e $k$ é o fator de ponderação
  • Mude o fator de ponderacao $k$ e veja o efeito na imagem final

2. Filtro de Sobel

Existem vários filtros que procuram realçar as bordas da imagem. Um dos mais conhecidos é o Operador Sobel, composto por uma máscara vertical (Sv) e uma máscara horizontal (Sh).


In [8]:
import numpy as np

Sv = np.array([[1,0,-1],[2,0,-2],[1,0,-1]])
print('Sv =\n',Sv)

Sh = np.array([[1,2,1],[0,0,0],[-1,-2,-1]])
print('Sh =\n',Sh)


Sv =
 [[ 1  0 -1]
 [ 2  0 -2]
 [ 1  0 -1]]
Sh =
 [[ 1  2  1]
 [ 0  0  0]
 [-1 -2 -1]]

2.1 Implementar o operador Magnitude Sobel de uma imagem.

A função MagSobel a ser implementada possui como parâmetro a imagem de entrada e deve seguir a seguinte equação:

$$MagSobel = \sqrt{f_h^2 + f_v^2}$$

onde $f_h$ é a imagem de entrada convolvida com o operador de Sobel horizontal e $f_v$ é a imagem de entrada convolvida com o operador de Sobel vertical.

Existem alguns cuidados necessários:

  • As operações devem todas serem feitas em ponto flutuante e os valores finais serão maiores de 255. Assim, a função que calcula a magnitude do gradiente Sobel é feita de acordo com a equação dada.
  • Lembre-se que para visualizar a imagem será necessário antes normalizar a imagem utilizando, por exemplo, o ianormalize.
  • Adicionalmente, como a máscara Sobel é 3x3, a imagem resultante terá altura e largura maiores que a original por 2x2 pixels já que a imagem resultante da convolução linear é a soma dos tamanhos em cada dimensão, menos 1.

2.2 Implementar uma funcao que retorna o ângulo da borda de Sobel

Após implementar a função que retorna o ângulo da borda de Sobel:

  • calcule o histograma da distribuição deste ângulo, somente para valores de magnitude de borda acima de um limiar $T$;
  • visualize a imagem de ângulo utilizando uma tabela de cores circular para os ângulos e uma cor diferente para usar nos locais onde a magnitude for menor que $T$. Plote junto com a figura, a tabela de cores usada;

3. Propriedades da convolução

Realize experimentos para demostrar as propriedades da convolução:

  • Comutativa $$f(x,y)*g(x,y) = g(x,y)*f(x,y)$$
  • Associativa $$f(x,y)*[g(x,y)*h(x,y)] = [f(x,y)*g(x,y)]*h(x,y)$$

Crie um exemplo que demonstre como usar a propriedade associativa para realizar a filtragem de uma imagem por um filtro passa-faixa. (Dica: use uma máscara passa-baixas e uma máscara passa-altas).